<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Intervention\Image\Facades\Image;

class createPoster extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'create:poster';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '创建海报';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * 处理方法
     *
     * @return void
     */
    public function handle()
    {
        $this->handleMergeImage(storage_path('background.png'), storage_path('qrcode.png'));
        $this->info('执行完毕！');
    }

    /**
     * 合并二维码到背景图片处理
     * @param string $backgroundImg  背景图片链接
     * @param string $qrImg  二维码图片链接
     */
    public function handleMergeImage($backgroundImg = '', $qrImg = '')
    {
        // 图片文件不存在跳出。
        if (!is_file($backgroundImg) || !is_file($qrImg)) {
            return true;
        }

        // 生成随机字符串
        $qrRandomStr = Str::random(11);
        Storage::makeDirectory('qrcode');
        $qrcodeFileName = storage_path('app/public') . '/qrcode/' . $qrRandomStr . '.png';

        $posterRandomStr = Str::random(11);
        Storage::makeDirectory('poster');
        $posterFileName = storage_path('app/public') . '/poster/' . $posterRandomStr . '.png';

        // 1. Image::make($qrImg) 实例化二维码图片生成对象。
        // 2. resize(width, height) 调整二维码宽高, 去适应背景图片空白处大小。
        // 3. save($arImg); 保存二维码到原来路径（相当于覆盖文件）， 路径自己配置。
        Image::make($qrImg)->resize(900, 900)->save($qrcodeFileName);

        // 进行图片的拼接
        // 1. Image::make($backgroundImg) 实例化背景图片生成对象。
        // 2. insert($qrImg, 'center', left, top) 将二维码放置背景图片中央 center,距离左边 0 像素，距离上部 450 像素，这些可根据背景图片真实大小是需要调整的。
        // 3. 将拼接后的图片保存到二维码路径（相当于覆盖文件）, 当然路径可以自己修改。

        $image = Image::make($backgroundImg)->insert($qrcodeFileName, 'center', 0, 450);

        // 获取字体文件地址，文件地址须使用绝对地址 - 字体文件使用英文命名
        $fontPath = storage_path('thin.ttf');
        $image->text('五花马千金裘，呼儿将出换美酒！', 400, 120, function ($font) use ($fontPath) {
            $font->file($fontPath); // 字体文件地址
            $font->size(60); // 字体大小
            $font->color('#FFB400');
            // $font->color([255, 0, 0, 1]);
            $font->align('left');
            $font->valign('bottom');
            $font->angle(5);
        });
        // 将文件保存
        $image->save($posterFileName);

    }
}
